package com.demo.java.OD51_100.OD93;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【括号检查】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145658278
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            Stack<Character> myStack = new Stack<>();
            Map<Character, Character> myMap = new HashMap<>();
            myMap.put(')', '('); // 右括号对应左括号
            myMap.put(']', '[');
            myMap.put('}', '{');

            Scanner s = new Scanner(System.in);
            String inputValues = s.nextLine(); // 读取输入的括号字符串
            char[] inputChars = inputValues.toCharArray();
            int result = 0; // 用来记录最大深度
            for (int i = 0; i < inputChars.length; ++i) {
                char c = inputChars[i];

                // 如果是左括号，入栈
                if (c == '[' || c == '{' || c == '(') {
                    myStack.push(c);
                    result = Math.max(result, myStack.size()); // 更新最大深度
                    continue;
                }

                // 如果是右括号，检查栈顶是否为匹配的左括号
                if (c == ']' || c == '}' || c == ')') {
                    if (myStack.size() == 0) {
                        System.out.print(0); // 不匹配，返回0
                        return;
                    }
                    if (myStack.lastElement().equals(myMap.get(c))) {
                        myStack.pop(); // 匹配，出栈
                    } else {
                        System.out.print(0); // 不匹配，返回0
                        return;
                    }
                }
            }
            // 最后检查栈是否为空，若不为空，说明有多余的左括号
            if (myStack.size() != 0) {
                System.out.print(0); // 不匹配，返回0
            } else {
                System.out.print(result); // 输出最大深度
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error"); // 异常时输出错误信息
        }
    }
}